package com.shen.lock;

public class Demo01 {
    public static void main(String[] args) {
        Phone phone = new Phone();

        new Thread(()->{
            phone.sms();
        },"A").start();

        new Thread(()->{
            phone.sms();
        },"B").start();

        /**
         * A SMS~
         * A Call~
         * B SMS~
         * B Call~
         *
         * 无论怎么执行都是线程先发短信然后再打电话
         *
         * call()获得一把phone的锁，这把锁也可以进入call()方法，call()方法执行完毕后释放锁
         */

    }
}
class Phone{
    /**
     * 锁的是使用这个方法的使用者
     * synchronized 隐式的加锁和解锁
     */
    public synchronized void sms(){
        System.out.println(Thread.currentThread().getName()+" SMS~");
        call();//又需要一把锁
    }
    public synchronized void call(){
    System.out.println(Thread.currentThread().getName()+" Call~");
    }
}
